| ..:: Menu ::.. | ..:: Kurs C++ : Funkcje nieco bliżej ::.. | ..::Info i Reklamy::.. |
|
Strona Główna Kursy DELPHI Kursy C++ Linki Forum Download Seriale Humor Reklama O autorze |
Nic nie dzieje się wbrew naturze, Możemy więc odkryć kolejne, ważne jego elementy, które pozwolą nam tworzyć bardziej interesujące i przydatne programy. Przyszła bowiem pora na spotkanie z instrukcjami sterującymi przebiegiem aplikacji i sposobem jej działania. Z funkcjami mieliśmy do czynienia już wcześniej. Powiedzieliśmy sobie wtedy, że są to wydzielone fragmenty kodu realizujące jakąś czynność. Przytoczyłem przy tym dość banalny przykład funkcji PokazTekst(), wyświetlającej w konsoli ustalony napis. Niewątpliwie był on klarowny i ukazywał wspomniane tam przeznaczenie funkcji (czyli podział kodu na fragmenty), jednakże pomijał dwa bardzo ważne aspekty z nimi związane. Chodzi mianowicie o parametry oraz zwracanie wartości. Rozszerzają one użyteczność i możliwości funkcji tak znacznie, że bez nich w zasadzie trudno wyobrazić sobie skuteczne i efektywne programowanie. W takiej sytuacji nie możemy wszak przejść obok nich obojętnie - niezwłocznie przystąpimy zatem do poznawania tych arcyważnych zagadnień :) Parametry funkcjiNie tylko w programowaniu trudno wskazać operację, którą można wykonać bez posiadania o niej dodatkowych informacji. Przykładowo, nie można wykonać operacji kopiowania czy przesunięcia pliku do innego katalogu, jeśli nie jest znana nazwa tegoż pliku oraz nazwa docelowego folderu.Gdybyśmy napisali funkcję realizującą taką czynność, to nazwy pliku oraz katalogu finalnego byłyby jej parametrami. Parametry pełnią rolę dodatkowych zmiennych wewnątrz funkcji i można ich używać podobnie jak innych zmiennych, zadeklarowanych w niej bezpośrednio. Różnią się one oczywiście tym, że wartości parametrów pochodzą z „zewnątrz” – są im przypisywane podczas wywołania funkcji. Po tym krótkim opisie czas na obrazowy przykład. Oto zmodyfikujemy nasz program liczący tak, żeby korzystał z dobrodziejstw parametrów funkcji: Rzut oka na działający program pozwala stwierdzić, iż wykonuje on taką samą pracę, jak jego poprzednia wersja. Z kolei spojrzenie na kod ujawnia w nim widoczne zmiany – przyjrzyjmy się im. Zasadnicza czynność programu, czyli dodawanie dwóch liczb, została wyodrębniona w postaci osobnej funkcji Dodaj(). Posiada ona dwa parametry nWartosc1 i nWartosc2, które są w niej dodawane do siebie i wyświetlane w konsoli. Wielce interesujący jest w związku z tym nagłówek funkcji Dodaj(), zawierający deklarację owych dwóch parametrów: Jak sam widzisz, wygląda ona bardzo podobnie do deklaracji zmiennych – najpierw piszemy typ parametru, a następnie jego nazwę. Nazwa ta pozwala odwoływać się do wartości parametru w kodzie funkcji, a więc na przykład użyć jej jako składnika sumy. Określenia kolejnych parametrów oddzielamy od siebie przecinkami, zaś całą deklarację umieszczamy w nawiasie po nazwie funkcji. Wywołanie takiej funkcji jest raczej oczywiste: Podajemy tu w nawiasie kolejne wartości, które zostaną przypisane jej parametrom; oddzielamy je tradycyjnie już przecinkami. W niniejszym przypadku parametrowi nWartosc1 zostanie nadana wartość zmiennej nLiczba1, zaś nWartosc2 – nLiczba2. Myślę, że jest to dość intuicyjne i nie wymaga więcej wyczerpującego komentarza :) Reasumując: parametry pozwalają nam przekazywać funkcjom dodatkowe dane, których mogą użyć do wykonania swoich działań. Ilość, typy i nazwy parametrów deklarujemy w nagłówku funkcji, zaś podczas jej wywoływania podajemy ich wartości w analogiczny sposób. Wartość zwracana przez funkcjęSpora część funkcji pisanych przez programistów ma za zadanie obliczenie jakiegoś wyniku (często na podstawie przekazanych im parametrów). Inne z kolei wykonują operacje, które nie zawsze muszą się udać (choćby usunięcie pliku – dany plik może przecież już nie istnieć).W takich przypadkach istnieje więc potrzeba, by funkcja zwróciła jakąś wartość. Niekiedy będzie to rezultat jej intensywnej pracy, a innym razem jedynie informacja, czy zlecona funkcji czynność została wykonana pomyślnie. Zgodnie ze zwyczajem, popatrzymy teraz na odpowiedni program przykładowy :) Pyta on użytkownika o długości boków prostokąta, wyświetlając w zamian jego pole powierzchni oraz obwód. Czyni to ten kod (jest to fragment funkcji main()): Linijki wyświetlające gotowy wynik zawierają wywołania dwóch funkcji – Obwod() i Pole(). Można je umieścić w tym miejscu, gdyż zwracają one wartości – w dodatku te, które chcemy zaprezentować :) Wyświetlamy je dokładnie w ten sam sposób jak wartości zmiennych i wszystkich innych wyrażeń liczbowych. Cała istota działania aplikacji zawiera się więc w tych dwóch funkcjach. Prezentują się one następująco: Cóż ciekawego możemy o nich rzec? Widoczną różnicą w stosunku do dotychczasowych przykładów funkcji, jakie mieliśmy okazję napotkać, jest chociażby zastąpienie słówka void przez nazwę typu, int. To oczywiście nie przypadek – w taki właśnie sposób informujemy kompilator, iż nasza funkcja ma zwracać wartość oraz wskazujemy jej typ. Kod funkcji to tylko jeden wiersz, zaczynający się od return (‘powrót’). Określa on ni mniej, ni więcej, jak tylko ową wartość, która będzie zwrócona i stanie się wynikiem działania funkcji. Rezultat ten zobaczymy w końcu i my w oknie konsoli: ![]() return powoduje jeszcze jeden efekt, który nie jest tu tak wyraźnie widoczny. Użycie tej instrukcji skutkuje mianowicie natychmiastowym przerwaniem działania funkcji i powrotem do miejsca jej wywołania. Wprawdzie nasze proste funkcje i tak kończą się niemal od razu, więc nie ma to większego znaczenia, jednak w przypadku poważniejszych podprogramów należy o tym fakcie pamiętać. Dowiedzieliśmy się zatem, iż funkcja może zwracać wartość jako wynik swej pracy. Rezultat taki winien być określonego typu – deklarujemy go w nagłówku funkcji jeszcze przed jej nazwą. Natomiast w kodzie funkcji możemy użyć instrukcji return, by wskazać wartość będącą jej wynikiem. Jednocześnie instrukcja ta spowoduje zakończenie działania funkcji. Składnia funkcjiGdy już poznaliśmy zawiłości i niuanse związane z używaniem funkcji w swoich aplikacjach, możemy tą wydatną porcję informacji podsumować ogólnymi regułami składniowymi dla podprogramów w C++. Otóż postać funkcji w tym języku jest następująca: Jeżeli dokładnie przestudiowałeś (i zrozumiałeś! :)) wiadomości z tego paragrafu i z poprzedniego rozdziału, nie powinna być ona dla ciebie żadnym zaskoczeniem. Zauważ jeszcze, ze fraza return może występować kilka razy, zwracać w każdym z wariantów różne wartości, a całość funkcji mieć logiczny sens i działać poprawnie. Jest to możliwe między innymi dzięki instrukcjom warunkowym, które poznamy już za chwilę.W ten oto sposób uzyskaliśmy bardzo ważną umiejętność programistyczną, jaką jest poprawne używanie funkcji we własnych programach. Upewnij się przeto, iż skrupulatnie przyswoiłeś sobie informacje o tym zagadnieniu, jakie serwowałem w aktualnym i poprzednim rozdziale. W dalszej części kursu będziemy często korzystać z funkcji w przykładowych kodach i omawianych tematach, dlatego ważne jest, byś nie miał kłopotów z nimi. <--- Wstecz | Dalej ---> |
Reklama To miejsce czeka na twoją reklame. Więcej informacji w dziale Reklama |